//package test;
//
//import java.math.BigDecimal;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.text.ParseException;
//import java.util.Collection;
//
//import com.optima.om.model.yfl.ArgDelayAmt;
//import com.optima.om.model.yfl.YflConstant;
//import com.optima.om.model.yfl.cash.business.YflcashBC;
//import com.optima.om.model.yfl.yfldb.YfldebtdetailVO;
//import com.optima.om.model.yfl.yfldb.YfldebtinfoVO;
//import com.sysware.om.model.platform.util.DateUtil;
//import com.sysware.om.model.platform.util.HandleException;
//import com.sysware.om.model.platform.util.dao.DAOUtil;
//
//public class ContractCount {
//	/** ************************************合同计算中用到的方法****************************************** */
//	/**
//	 * 基于基准日计算合同中逾期的租金
//	 * Notes : 在统计逾期租金之前
//	 * 首先：根据日期更新租金的
//	 * 其次：统计租金
//	 * 
//	 * @param contractid 合同编号
//	 * @param baseDate 租金还款状态的基准日期
//	 * @author kiven
//	 * @date 2011-11-09
//	 * @return
//	 * @throws HandleException 
//	 */
//	public BigDecimal getDelayrentamt(String contractid,String baseDate) throws HandleException {
//		// 在查询租金状态之前先更改各期租金的还款状态
//		dao.update("tbyfldebtinfo", "returnflag='1'", "contractdt<'"
//				+ baseDate + "' AND returnflag<>0 AND contractid = '" + contractid + "'");
//		// 更新未到期租金状态必须要根据情况来做更新，根据基准日期的大小做判断，未到期租金如何更新
//		
//		dao.update("tbyfldebtinfo", "returnflag='2'", "contractdt>='"
//				+ baseDate + "' AND returnflag<>0 AND contractid = '" + contractid + "'");
//		
//		// 统计逾期的租金
//		YfldebtinfoVO vo = new YfldebtinfoVO();
//		Collection<YfldebtinfoVO> result = dao.query(vo,"period <> 0 and contractid = '" + contractid + "'");
//		BigDecimal delayRentAmt = new BigDecimal("0");
//		for (YfldebtinfoVO debtVO : result) {
//			if ("1".equals(debtVO.getReturnflag())) {// 逾期的
//				// 当期应付的租金  - 当期已付的租金 
//				delayRentAmt = delayRentAmt.add(debtVO.getExpireamt().subtract(debtVO.getReturntotalamt()));
//			}
//			
//			if ("0".equals(debtVO.getReturnflag())) {// 已还款的
//				// 已还款租金的部分应该将基准日后进账的租金也要加入逾期租金中
//				YfldebtdetailVO detailVO = new YfldebtdetailVO();
//				// 3期系统中，如果还其他费用的明细也是存在tbyfldebtdetail这张表中，所以要将realreturnamt = 0 过滤掉
//				Collection<YfldebtdetailVO> rs = dao.query(detailVO,"realreturnamt <> 0 and relationid = '" 
//						+ debtVO.getRelationid() + "'");
//				for (YfldebtdetailVO detailVO2 : rs) {
//					if (detailVO2.getRealreturndt().compareTo(baseDate)>0) {// 进账日大于基准日
//						delayRentAmt = delayRentAmt.add(detailVO2.getRealreturnamt());
//					}
//				}
//			}
//		}
//		
//		// 返回两部分相加的结果(1.逾期的;2已还款的但是还款日在基准日之后进账的租金)
//		return delayRentAmt;
//	}	
//	
//	/**
//	 * 基于基准日计算合同中租金余额
//	 * 在做计算之前必须先根据基准日去更新合同中各期租金的状态
//	 * 
//	 * @param contractid 合同编号
//	 * @param baseDate 还款状态的基准日
//	 * @author kiven
//	 * @return
//	 * @throws HandleException 
//	 */
//	public BigDecimal getRemainrentamt(String contractid,String baseDate) throws HandleException {
//		// 在查询租金状态之前先更改各期租金的还款状态
//		dao.update("tbyfldebtinfo", "returnflag='1'", "contractdt<'"
//				+ baseDate + "' AND returnflag<>0");
//		dao.update("tbyfldebtinfo", "returnflag='2'", "contractdt>='"
//				+ baseDate + "' AND returnflag<>0");
//		
//		YfldebtinfoVO vo = new YfldebtinfoVO();
//		Collection<YfldebtinfoVO> result;
//		result = dao.query(vo,"period <> 0 and contractid = '" + contractid + "'");
//		
//		BigDecimal remainRentAmt = new BigDecimal("0");
//		for (YfldebtinfoVO debtVO : result) {
//			if (!"0".equals(debtVO.getReturnflag())) {// 逾期的
//				// 当期应付的租金  - 当期已付的租金 
//				remainRentAmt = remainRentAmt.add(debtVO.getExpireamt().subtract(debtVO.getReturntotalamt()));
//			}
//			
//			if ("0".equals(debtVO.getReturnflag())) {// 已还款的
//				// 已还款的租金中还款日期在基准日之后也要加入租金余额中
//				YfldebtdetailVO detailVO = new YfldebtdetailVO();
//				// 3期系统中，如果还其他费用的明细也是存在tbyfldebtdetail这张表中，所以要将realreturnamt = 0 过滤掉
//				Collection<YfldebtdetailVO> rs = dao.query(detailVO,"realreturnamt <> 0 and relationid = '" 
//						+ debtVO.getRelationid() + "'");
//				for (YfldebtdetailVO detailVO2 : rs) {
//					if (detailVO2.getRealreturndt().compareTo(baseDate)>0) {// 进账日大于基准日
//						remainRentAmt = remainRentAmt.add(detailVO2.getRealreturnamt());
//					}
//				}
//			}
//		}
//		
//		// 租金余额由两部分组成1：根据基准日对应的未到期或者逾期的
//		return remainRentAmt;
//	}
//	
//	
//	/**
//	 * 计算合同的最大欠缴天数
//	 * 最大欠缴天数：未还清的租金中最大的延缴天数
//	 * 
//	 * @param contractid 合同编号
//	 * @param baseDate 基准日
//	 * @author kiven
//	 * @return
//	 * @throws HandleException 
//	 * @throws ParseException 
//	 */
//	public int getMaxDelaydt(String contractid,String baseDate) throws HandleException {
//		// 先修改各期租金中的状态，
//		dao.update("tbyfldebtinfo", "returnflag='1'", "contractdt<'"
//				+ baseDate + "' AND returnflag<>0");
//		dao.update("tbyfldebtinfo", "returnflag='2'", "contractdt>='"
//				+ baseDate + "' AND returnflag<>0");
//		
//		try {
//			ResultSet rs = new DAOUtil().query("select top 1 contractdt from tbyfldebtinfo where period<>0 and " +
//					" returntotalamt < expireamt and returnflag = '1' and contractid = '"
//					+ contractid + "' order by period asc");
//			if (rs.next()) {
//				String contractdt = rs.getString("contractdt");
//				String nowdt = DateUtil.getBusinessDate(YflConstant.SYSTEM_ID).toString().substring(0,10);
//				
//				return ArgDelayAmt.getDelaydt(contractdt, nowdt);
//			}
//		
//		} catch (SQLException e) {
//			e.printStackTrace();
//		} catch (ParseException e) {
//			e.printStackTrace();
//		}
//		return 0;
//	}
//	
//	/**
//	 * 计算合同的最大延缴天数
//	 * 最大延缴天数：该合同下各期租金中最大的延缴天数（包括已还清的租金）
//	 * 
//	 * @param contractid 合同编号
//	 * @author kiven
//	 * @return
//	 */
//	public int getMaxDelaydtAmt(String contractid) {
//		int maxDelatdt = new YflcashBC().getMaxDelaydt(contractid);
//		
//		
//		
//	}
//	
//	/**
//	 * 到基准日止，该合同下应收的延滞息
//	 * 
//	 * @param contractid 合同编号
//	 * @param baseDate 基准日
//	 * @author kiven
//	 * @return
//	 */
//	public BigDecimal getDelayArrearageIntest(String contractid,String baseDate) {
//		
//	}
//	
//	/**
//	 * 到基准日止，该合同下已还的延滞息
//	 * 
//	 * @param contractid 合同编号
//	 * @param baseDate 基准日
//	 * @author kiven
//	 * @return
//	 */
//	public BigDecimal getHaspayArrearageIntest(String contractid,String baseDate) {
//		
//	}
//	
//	/**
//	 * 计算合同的已缴租金期数
//	 * 说明：这边已缴期数是已经缴清租金的期数
//	 * 
//	 * @param contractid 合同编号
//	 * @author kiven
//	 * @return
//	 * @throws HandleException 
//	 */
//	public int getHaspaymentPeriod(String contractid) throws HandleException {
//		YfldebtinfoVO vo = new YfldebtinfoVO();
//		Collection<YfldebtinfoVO> result;
//		result = dao.query(vo,"returnflag = '0' and period<>0 and contractid = '" + contractid + "'");
//		
//		return result.size();
//	}
//	
//	/**
//	 * 计算合同本金余额。
//	 * @param contractid
//	 * @author kiven
//	 * @return
//	 * @throws HandleException
//	 */
//	public BigDecimal getPrincipalbalanceE(String contractid)
//			throws HandleException {
//		try {
//			ResultSet rs = dao
//					.query("select top 1 principalbalanceE from vwyflprincipalbalanceE where contractid='"
//							+ contractid + "' order by period desc ");
//			if (rs.next()) {
//				BigDecimal bg = rs.getBigDecimal("principalbalanceE");
//				return bg;
//			}
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}
//		return BigDecimal.ZERO;
//	}
//	
//	/**
//	 * 计算合同本金金额
//	 * 
//	 * @param contractid
//	 * @author kiven
//	 * @return
//	 * @throws HandleException
//	 */
//	public BigDecimal getPrincipa(String contractid) throws HandleException {
//		ResultSet rs = dao.query("select principal from vwyflprincipal where contractid = '" + contractid + "'");
//		
//		try {
//			if (rs.next()) {
//				BigDecimal bg = rs.getBigDecimal("principal");
//				return bg;
//			}
//		} catch (SQLException e) {
//			e.printStackTrace();
//		}
//		return BigDecimal.ZERO;
//	}//
//}
